package mapper

import (
	"fmt"
)

// 有注入风险。谨慎前端传递参数使用
func (m MapperQuery) ConOrderBy(condition bool, clos ...string) *MapperQuery {
	if !condition {
		return &m
	}

	m.orderBy = append(m.orderBy, clos...)

	return &m
}

// 有注入风险。谨慎前端传递参数使用
// 排序
// 示例：mapper.OrderBy("id asc")
func (m MapperQuery) OrderBy(clos ...string) *MapperQuery {

	m.orderBy = append(m.orderBy, clos...)

	return &m
}

// 有注入风险。谨慎前端传递参数使用
// 排序
// 示例：mapper.OrderByAsc("id")
func (m MapperQuery) OrderByAsc(clos ...string) *MapperQuery {

	for _, clo := range clos {

		m.orderBy = append(m.orderBy, clo+" ASC")

	}

	return &m
}

// 有注入风险。谨慎前端传递参数使用
// 排序
// 示例：mapper.OrderByDesc("id")
func (m MapperQuery) OrderByDesc(clos ...string) *MapperQuery {

	for _, clo := range clos {

		m.orderBy = append(m.orderBy, clo+" DESC")

	}

	return &m
}

// 有注入风险。谨慎前端传递参数使用
// GroupBy
// 示例：mapper.GroupBy("id")
func (m MapperQuery) GroupBy(clo string) *MapperQuery {
	m.groupBy = clo

	return &m
}

// 有注入风险。谨慎前端传递参数使用
func (m MapperQuery) Having(clo string) *MapperQuery {

	m.having = clo
	return &m
}

// 有注入风险。谨慎前端传递参数使用
// 跟在SQL语句最末尾
func (m MapperQuery) Last(last string) *MapperQuery {
	return m.ConLast(true, last)
}

// 有注入风险。谨慎前端传递参数使用
// 跟在SQL语句最末尾
func (m MapperQuery) ConLast(condition bool, last string) *MapperQuery {
	if !condition {
		return &m
	}
	m.last = last
	return &m
}

// 打印最终SQL语句以及参数
func (m MapperQuery) To() *MapperQuery {

	fmt.Println(FinalStr(m))
	return &m
}
